https://blog.csdn.net/a1459268562/article/details/70653695
在MFC中定义的基本变量
首先,所有的变量都被从小写定义成了大写。如:
typedef int BOOL;//TRUE FALSE
typedef unsigned char BYTE;
typedef float FLOAT;
typedef int INT;
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
typedef CHAR* PCHAR, LPSTR; //可写的字符指针变量
#ifndef VOID
#define VOID void
还有字的定义:
typedef unsigned long DWORD;//双字
typedef unsigned short WORD;//单字
所有的无符号变量都加上U来区分。如:
typedef unsigned int UINT;
所有的指针类型变量都加上P来区分。如:
typedef FLOAT * PFLOAT;
typedef BOOL near * PBOOL;
typedef BOOL far* LPBOOL;
typedef BYTE near * PBYTE;
typedef BYTE far* LPBYTE;
typedef int near* PINT;
typedef int far * LPINT;
typedef WORD near * PWORD;
typedef WORD far* LPWORD;
typedef long far* LPLONG;
typedef DWORD near * PDWORD;
typedef DWORD far * LPDWORD;
typedef void far* LPVOID;
typedef CONST void far * LPCVOID;
//near和far是c语言相对古老的的用法,用于声明变量在内存中的远近(以前16位的dos操作系统,最大有64K的内存,紧缺的很~)。
所有的常量指针都使用C。如:
typedef CONST void* LPCVOID;
typedef CONST CHAR * LPCSTR, * PCSTR;//只读的字符指针变量
结构体类型。主要有三个POINT、SIZE、RECT
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, * PPOINT, * LPPOINT;//结构体别名
typedef struct tagSIZE { LONGcx; LONGcy; } SIZE, * PSIZE, * LPSIZE; typedef struct tagRECT { LONGleft; LONGtop; LONGright; LONGbottom; } RECT, * PRECT, * LPRECT;
3. 最神奇的句柄类型。
句柄是一种故意隐藏了内容的结构体指针。看一下HWND的声明:
…
DECLARE_HANDLE(HWND);
…
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ * name
可以看到HWND就是结构体的指针,而结构体的内容是unused,(拒绝使用~)。
- HWND 窗口句柄
- HINSTANCE 进程实例句柄
- HCURSOR 光标句柄
- HICON 图标句柄
- HMENU 菜单句柄
- HFONT 字体句柄
- HFILE 文件句柄
- 等
4. 最复杂的字符串指针类型
首先,谈精简版的历史。很早以前,各国文字都有自己的编码方式,而且每个国家字符的字节也不一样(多字节字符)。后来,拥有了统一的编码方式,统一了编码--Unicode。
vs中创建项目时,默认是Unicode编码的。可以使用wchar_t来声明Unicode编码的字符串,而且字符串声明时在前面加上L。TCHAR是一个怪胎,他是char和wchar_t的自适应版。
const char * p = “aaa”; //内存中,每个a占有一个字节
const char * pc = “中国”;//内存中,每个汉字占有两个字节
const wchar_t * pU = L”aa”;//内存中,每个a占有两个字节
const wchar_t * pcU = L”中国”;//内存中,每个汉字占有一个字节
const TCHAR * s = L”aa”;//这个TCHAR声明时,必须声明成Unicode编码的串
/*
//修改vs的编码方式为’多字节字符集’后
const TCHAR * s =L”aa”;//这就会报错,因为这时候TCHAR是char类型
const TCHAR * s =”aa”;//不会报错
* /
本页共105段,2833个字符,4013 Byte(字节)